old_abs_y = private->abs_y;
/* Update absolute position */
- if (gdk_window_has_impl (private))
+ if ((gdk_window_has_impl (private) &&
+ private->window_type != GDK_WINDOW_SUBSURFACE) ||
+ (gdk_window_is_toplevel (private) &&
+ private->window_type == GDK_WINDOW_SUBSURFACE))
{
- /* Native window starts here */
+ /* Native windows and toplevel subsurfaces start here */
private->abs_x = 0;
private->abs_y = 0;
}
impl->display_server.wl_subsurface =
wl_subcompositor_get_subsurface (display_wayland->subcompositor,
impl->display_server.wl_surface, parent_impl->display_server.wl_surface);
- wl_subsurface_set_position (impl->display_server.wl_subsurface, window->x, window->y);
+ wl_subsurface_set_position (impl->display_server.wl_subsurface,
+ window->x + window->abs_x,
+ window->y + window->abs_y);
/* In order to synchronize the initial position with the initial frame
* content, wait with making the subsurface desynchronized until after
if (impl->display_server.wl_subsurface)
{
- wl_subsurface_set_position (impl->display_server.wl_subsurface, x, y);
+ wl_subsurface_set_position (impl->display_server.wl_subsurface,
+ window->x + window->abs_x,
+ window->y + window->abs_y);
gdk_window_request_transient_parent_commit (window);
}
}